table_helper.RequestToUrl   A
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 15
rs 9.8
cc 4
nc 2
nop 1
1
var table_helper = {
2
    BuildRequest: {
3
        Run: function(tableId){
4
            var rq = {tableId: tableId};
5
            var parent = this.helper.BuildRequest;
6
            parent.sort(rq);
7
            parent.filter(rq);
8
            return rq;
9
        },
10
        sort: function(rq){
11
            var table = document.getElementById(rq.tableId);
12
            var thTags = table.getElementsByTagName("thead")[0]
13
                        .getElementsByTagName("th");
14
            var length = thTags.length;
15
            for(var i = 0; i < length; i++){
16
                var link = thTags[i].getElementsByTagName("a")[0];
17
                if(link){
18
                    var span = link.getElementsByTagName("span")[0];
19
                    if(span && sortBySpan(span, i, table)){
20
                        break;
21
                    }
22
                }
23
            }
24
25
            function sortBySpan(span, i, table){
26
                var order = span.innerHTML;
27
                if(order.length === 1){
28
                    rq.colNo = i;
29
                    var dSymbol = table.getAttribute('data-sort-d');
30
                    rq.colOrd = order === dSymbol ? "desc" : "asc";
31
                }
32
                return rq.colNo === i;
33
            }
34
        },
35
        filter: function(rq){
36
            var r = getFilterFieldsByTableID(rq.tableId);
37
            if(r.filter !== null){
38
                rq.filter = r.filter;
39
            }
40
            if(r.filterBy !== null){
41
                rq.filterBy = r.filterBy;
42
            }
43
44
            function getFilterFieldsByTableID(tableID){
45
                var fields = {filterBy: null, filter: null};
46
                var filterDiv = getFilterDivByTableIDOrNull(tableID);
47
                if(filterDiv !== null){
48
                    setFilterBy(fields, filterDiv);
49
                    setFilterValue(fields, filterDiv);
50
                }
51
                return fields;
52
53
                function getFilterDivByTableIDOrNull(tableID){
54
                    if(document.getElementById(tableID).parentNode
55
                            .getElementsByTagName("div").length > 0
56
                            ){
57
                        var containerDivs = document.getElementById(tableID)
58
                                .parentNode.getElementsByTagName("div");
59
                        for(var i = 0; i < containerDivs.length; i++){
60
                            if(containerDivs[i].getAttribute("class") === "filter"){
61
                                return containerDivs[i];
62
                            }
63
                        }
64
65
                    }
66
                    return null;
67
                }
68
69
                function setFilterBy(fields, filterDiv){
70
                    var select = filterDiv.getElementsByTagName("select")[0];
71
                    if(select &&
72
                            select.options[select.selectedIndex].value !== "all"
73
                            ){
74
                        fields.filterBy = select.options[select.selectedIndex].value;
75
                    }
76
                }
77
                function setFilterValue(fields, filterDiv){
78
                    var textObj = filterDiv.getElementsByTagName("input")[0];
79
                    if(textObj && textObj.value && textObj.value.length !== 0){
80
                        fields.filter = encodeURIComponent(textObj.value.trim());
81
                    }
82
                }
83
            }
84
        }
85
    },
86
    IePrior: function(v){
87
        var rv = false;
88
        if(window.navigator.appName === 'Microsoft Internet Explorer'){
89
            var ua = window.navigator.userAgent;
90
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
91
            if(re.exec(ua) !== null){
92
                rv = parseFloat(RegExp.$1);
93
            }
94
            rv = rv < v ? true : false;
95
        }
96
        return rv;
97
    },
98
    GetParent: function(obj, objType){
99
        while(obj && obj.tagName !== objType.toUpperCase()){
100
            obj = obj.parentNode;
101
        }
102
        return obj;
103
    },
104
    ProcessPaginationLinks: function(tfoot){
105
        var pLinks = tfoot.querySelectorAll(".paging a");
106
        if(pLinks.length > 0){
107
            for(var j = 0; j < pLinks.length; j++){
108
                pLinks[j].setAttribute("href", "javascript:void(0);");
109
                pLinks[j].setAttribute("onclick", "return table.GoPage(this);");
110
            }
111
        }
112
    },
113
    RequestToUrl: function(rq){
114
        var url = location.pathname + ".json" + location.search;
115
        var getUrlVarName = {
116
            colNo: "col", colOrd: "ord", filter: "filter",
117
            filterBy: "filter-by", pageNo: "pg", exportType: "export",
118
            tableId: "table-id"
119
        };
120
        var flagFirst = location.search.length < 1 ? true : false;
121
        for(var r in rq){
122
            var clue = flagFirst === true ? "?" : "&";
123
            url += clue + getUrlVarName[r] + "=" + rq[r];
124
            flagFirst = false;
125
        }
126
        return url;
127
    }
128
};
129